//判断是否有重复下子，若重复下子，则输出高电平信号

module error_move(
   input [1:0] pos1,pos2,pos3,pos4,pos5,pos6,pos7,pos8,pos9, 
   input [8:0] PC_en, PL_en, 
   output wire illegal_move
   );
wire temp1,temp2,temp3,temp4,temp5,temp6,temp7,temp8,temp9;
wire temp11,temp12,temp13,temp14,temp15,temp16,temp17,temp18,temp19;
wire temp21,temp22;


    // 玩家方面 
    assign temp1 = (pos1[1] | pos1[0]) & PL_en[0];//tempx为高电平时，说明x位置玩家重复下棋
    assign temp2 = (pos2[1] | pos2[0]) & PL_en[1];
    assign temp3 = (pos3[1] | pos3[0]) & PL_en[2];
    assign temp4 = (pos4[1] | pos4[0]) & PL_en[3];
    assign temp5 = (pos5[1] | pos5[0]) & PL_en[4];
    assign temp6 = (pos6[1] | pos6[0]) & PL_en[5];
    assign temp7 = (pos7[1] | pos7[0]) & PL_en[6];
    assign temp8 = (pos8[1] | pos8[0]) & PL_en[7];
    assign temp9 = (pos9[1] | pos9[0]) & PL_en[8];

    // 电脑方面
    assign temp11 = (pos1[1] | pos1[0]) & PC_en[0];//temp1x为高电平时，说明x位置电脑重复下棋
    assign temp12 = (pos2[1] | pos2[0]) & PC_en[1];
    assign temp13 = (pos3[1] | pos3[0]) & PC_en[2];
    assign temp14 = (pos4[1] | pos4[0]) & PC_en[3];
    assign temp15 = (pos5[1] | pos5[0]) & PC_en[4];
    assign temp16 = (pos6[1] | pos6[0]) & PC_en[5];
    assign temp17 = (pos7[1] | pos7[0]) & PC_en[6];
    assign temp18 = (pos8[1] | pos8[0]) & PC_en[7];
    assign temp19 = (pos9[1] | pos9[0]) & PC_en[8];

    //中间变量
    assign temp21 = ((((((((temp1 | temp2) | temp3) | temp4) | temp5) | temp6) | temp7) | temp8) | temp9 );//其中任何一个为高电平，则玩家有重复
    assign temp22 = ((((((((temp11 | temp12) | temp13) | temp14) | temp15) | temp16) | temp7) | temp8 )| temp9 );//其中任何一个为高电平，则电脑有重复

    //output
    assign illegal_move = temp21 | temp22;//其中任何一个为高电平，则有重复,输出高电平

endmodule 